package com.hzit.portail.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.hzit.portail.dto.ContentDTO;
import com.hzit.portail.service.IPortalService;
import com.ruoyi.common.core.constant.HzitConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.Content;
import com.ruoyi.system.api.RemoteManagerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
@Service
public class PortalServiceImpl implements IPortalService {
	@Autowired
	private RemoteManagerService managerService;
	@Autowired
	private StringRedisTemplate redisTemplate;

	//1. 根据广告分类id查询广告分类
	@Override
	public List<ContentDTO> findContentsByCategoryId(Long id) {
		List<ContentDTO> dtos;
		//1.0 从redis中直接获取数据
		String s = redisTemplate.opsForValue().get(HzitConstants.CONTENT_LIST);
		if(StrUtil.isNotBlank(s)){
			//1.1 直接转换为List<ContentDTO>集合
			dtos = JSON.parseArray(s,ContentDTO.class);
		}else{
			System.out.println("正在从数据库查询广告列表。。。");
			//1.1 得到远程调用的广告列表
			R<List<Content>> r = managerService.findContentsByCategoryId(id);
			List<Content> data = r.getData();
			//1.2 将List<Content>转换为List<ContentDTO>
			dtos = data.stream().map(m ->{
				ContentDTO dto = new ContentDTO();
				BeanUtil.copyProperties(m,dto,true);
				return dto;
			}).collect(Collectors.toList());
			//1.3 放到redis中
			redisTemplate.opsForValue().set(HzitConstants.CONTENT_LIST,JSON.toJSONString(dtos),30, TimeUnit.DAYS);
		}
		return dtos;
	}
}
